{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "intro-loops",
   "metadata": {},
   "source": [
    "# Introducción a los bucles en Python"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "concept-loops",
   "metadata": {},
   "source": [
    "## Paso 1: ¿Qué son los bucles?\n",
    "Los bucles son un concepto esencial en programación que permite repetir un bloque de código varias veces. Esta repetición es increíblemente útil cuando se desea procesar una colección de elementos o realizar una operación hasta que se cumpla una condición.\n",
    "En Python, existen dos tipos principales de bucles:\n",
    "- **Bucle `for`**: Se utiliza para iterar sobre una secuencia (como una lista, tupla o cadena) o realizar una acción un número específico de veces.\n",
    "- **Bucle `while`**: Se utiliza para que el bucle continúe ejecutándose mientras una condición determinada se mantenga `True`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "types-loops",
   "metadata": {},
   "source": [
    "### Los dos tipos principales de bucles en Python\n",
    "- **Bucle `for`**: Este bucle funciona iterando sobre una secuencia (como una lista o una cadena) y ejecutando el bloque de código para cada elemento.\n",
    "- **Bucle `while`**: Este bucle se ejecuta mientras una condición dada sea `True`. Se usa comúnmente cuando no se sabe cuántas veces debe ejecutarse el bucle de antemano y depende de alguna condición."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "for-loop",
   "metadata": {},
   "source": [
    "## Paso 2: El bucle \"for\"\n",
    "Un bucle \"for\" se usa generalmente cuando se conoce el número de iteraciones o se necesita iterar sobre una secuencia de elementos, como una lista, una tupla o una cadena.\n",
    "Ejemplo de un bucle \"for\" que itera sobre una lista de números:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "code-for-loop",
   "metadata": {},
   "outputs": [],
   "source": [
    "numbers = [1, 2, 3, 4, 5]\n",
    "# The for loop will go through each element in the numbers list\n",
    "for num in numbers:\n",
    "    print(num)  # Output: 1 2 3 4 5"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "while-loop",
   "metadata": {},
   "source": [
    "## Paso 3: El bucle `while`\n",
    "Un bucle `while` continúa ejecutándose mientras una condición especificada sea `True`. Este tipo de bucle es útil cuando el número de iteraciones no se conoce de antemano y depende de alguna condición.\n",
    "Ejemplo de un bucle `while` que cuenta de 0 a 4:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "code-while-loop",
   "metadata": {},
   "outputs": [],
   "source": [
    "count = 0\n",
    "# The loop runs as long as count is less than 5\n",
    "while count < 5:\n",
    "    print(count)  # Output: 0 1 2 3 4\n",
    "    count += 1  # Increment count by 1 after each iteration"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "break-continue",
   "metadata": {},
   "source": [
    "## Paso 4: Uso de `break` y `continue`\n",
    "Puedes controlar el flujo de un bucle con las sentencias `break` y `continue`:\n",
    "- `break`: Sale del bucle inmediatamente.\n",
    "- `continue`: Omite la iteración actual y pasa a la siguiente iteración del bucle."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "code-break-continue",
   "metadata": {},
   "outputs": [],
   "source": [
    "for num in range(10):\n",
    "    if num == 5:\n",
    "        break  # Stops the loop when num is 5\n",
    "    if num == 3:\n",
    "        continue  # Skips number 3\n",
    "    print(num)  # Output: 0 1 2 4"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "nested-loops",
   "metadata": {},
   "source": [
    "## Paso 5: Bucles anidados\n",
    "Un bucle anidado es un bucle dentro de otro bucle. Esto resulta útil cuando se necesita realizar una tarea que involucra múltiples secuencias, como iterar sobre una lista de listas.\n",
    "Ejemplo de bucles anidados que iteran sobre un par de secuencias:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "code-nested-loops",
   "metadata": {},
   "outputs": [],
   "source": [
    "for i in range(3):\n",
    "    for j in range(2):\n",
    "        print(f'({i}, {j})')  # Output: (0,0) (0,1) (1,0) (1,1) (2,0) (2,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "exercise-loops",
   "metadata": {},
   "source": [
    "## Paso 6: Ejercicios prácticos\n",
    "¡Ahora es momento de practicar lo aprendido! Intenta resolver los siguientes ejercicios."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "455e845c",
   "metadata": {},
   "source": [
    "Ejercicio 1: Imprimir los números del 1 al 10\n",
    "Escribe un programa que imprima los números del 1 al 10 mediante un bucle \"for\". El resultado debería ser: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d5976fe7",
   "metadata": {},
   "source": [
    "### Ejercicio 2: Cuenta regresiva\n",
    "Escriba un programa que utilice un bucle `while` para imprimir una cuenta regresiva del 10 al 1.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "exercise-3",
   "metadata": {},
   "source": [
    "Ejercicio 3: Suma de números\n",
    "Escribe un programa que calcule la suma de todos los números del 1 al 100 mediante un bucle \"for\". Muestra la suma al final."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.x"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
